Modern computer systems are frequently implemented as virtual computer systems operating collectively on one or more host computer systems. These virtual computer systems may utilize resources of host computer systems such as processors, memory, network interfaces, storage services, and other host computer system resources. These virtual computer systems may also include software applications configured to operate on the virtual computer systems, which may utilize these resources to perform functionality on behalf of users of the virtual computer systems. If the resources associated with a virtual computer are not matched to the software application needs, a degraded user experience may result. When the resources are inadequate for the software application needs, reduced system performance and/or increased system outages may result. When the resources are underutilized, needed system resources may be unnecessarily consumed by idle processes.
One approach to the problem of configuring a virtual machine instance to support a suite of software applications is to configure the virtual machine and deploy instances of that configuration to users. However, in the case of a large or complex virtual computer system with many instances of a particular virtual machine configuration, the process of configuring, testing, and updating a particular configuration can take a significant amount of time. Additionally, the loss of available virtual machine instances during this configuration process and the expense of maintaining idle host computer systems during this configuration process may further degrade the user experience.